package com.wxf.test;

import com.wxf.insertionSort.InsertionSort;
import com.wxf.selectionSort.SelectionSort;

import java.util.ArrayList;
import java.util.List;

public class CompareTestUtil {
    /**
     * 计算某种排序方法的运行时间
     * @param sortEnum 需要计时的排序方法
     * @param a 用于排序的数组
     * @return 运行时间
     */
    public static double time(SortEnum sortEnum, Comparable[] a){
        double startTime = System.currentTimeMillis();
        if(sortEnum == SortEnum.SELECTION) SelectionSort.sort(a);
        if(sortEnum == SortEnum.INSERTION) InsertionSort.sort(a);
        double endTime = System.currentTimeMillis();
        return endTime-startTime;
    }

    /**
     * 生成N维数组
     * @param N
     * @return
     */
    public static Comparable[] generateArray(int N){
        Comparable[] arr = new Comparable[N];
        for(int j=0; j<N; j++){
            arr[j] = Math.random();
        }
        return arr;
    }

    /**
     * 随机生成数组，并计算总运行时间
     * @param sortEnum 使用哪种排序方法
     * @return 排序时间
     */
    public static double calculateTimeForRandomInput(SortEnum sortEnum, Comparable[]arr){
        return time(sortEnum, arr);
    }


    public static List calculateRunTime(SortEnum[] enums,int N, int T){
        List list = new ArrayList();
        Comparable[] arr = generateArray(N);
        for(int i=0; i<enums.length; i++){
            double time = 0.0;
            for(int j=0; j<T; j++){
                time+=calculateTimeForRandomInput(enums[i],arr);
            }
            list.add(time);
        }
        return list;
    }
}
